package day02

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * 分区规则
 * 1、默认分区源码(RDD从集合中创建)
 * 2、分区源码（RDD数据从集合中创建）
 * 3、分区源码（RDD数据从文件中读取后创建）
 */
object PartitionRule {

}

/**
 * 1、默认分区源码(RDD从集合中创建)
 */
object PartitionDefault {
  def main(args: Array[String]): Unit = {
    //1.创建SparkConf并设置App名称
    val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")

    //2.创建SparkContext，该对象是提交Spark App的入口
    val sc: SparkContext = new SparkContext(conf)

    //3.创建RDD
    val rdd: RDD[Int] = sc.makeRDD(Array(1, 2, 3, 4))
    rdd.saveAsTextFile("output")

    //4.关闭连接
    sc.stop()
  }
}

/**
 * 2、分区源码（RDD数据从集合中创建）
 */
object PartitionArray {
  def main(args: Array[String]): Unit = {
    //1.创建SparkConf并设置App名称
    val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest1").setMaster("local[*]")

    //2.创建SparkContext，该对象是提交Spark App的入口
    val sc: SparkContext = new SparkContext(conf)

    //3. 4个数据，设置4个分区，输出：0分区->11，1分区->22，2分区->33，3分区->44
    //    val rdd: RDD[Int] = sc.makeRDD(Array(11, 22, 33, 44), 4)

    //3. 4个数据，设置3个分区，输出：0分区->11，1分区->22，2分区->33,44
    //    val rdd: RDD[Int] = sc.makeRDD(Array(11, 22, 33, 44), 3)

    //3. 5个数据，设置3个分区，输出：0分区->11，1分区->22、33，2分区->44、55
    val rdd: RDD[Int] = sc.makeRDD(Array(11, 22, 33, 44, 55), 3)

    rdd.saveAsTextFile("output")
    //4.关闭连接
    sc.stop()
  }
}

/**
 * 3、分区源码（RDD数据从文件中读取后创建）
 */
object PartitionFile {
  def main(args: Array[String]): Unit = {
    //1.创建SparkConf并设置App名称
    val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")

    //2.创建SparkContext，该对象是提交Spark App的入口
    val sc: SparkContext = new SparkContext(conf)

    //3.默认分区的数量：默认取值为当前核数和2的最小值 => math.min(defaultParallelism, 2)
    val rdd: RDD[String] = sc.textFile("input")

    rdd.saveAsTextFile("output")

    //4.关闭连接
    sc.stop()
  }
}
